<?php

namespace Siese\EntityBundle\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use Siese\EntityBundle\Entity\InspeccionesEntidades;
use Siese\EntityBundle\Entity\RangosEdadesEntidadInspeccion;
use Siese\EntityBundle\Entity\OtrasRazones;
use Siese\EntityBundle\Entity\EtniasEntidadInspeccion;
use Siese\EntityBundle\Entity\DiscapacidadesEntidadInspeccion;
use Siese\EntityBundle\Entity\ProcedenciaPobEntidadInspeccion;
use Siese\EntityBundle\Entity\EspecialidadesEntidadInspeccion;
use Siese\EntityBundle\Entity\PatologiasPresentadasEntidadInspeccion;
use Siese\EntityBundle\Entity\RazonesDecesosPobEntidadInspeccion;
use Siese\EntityBundle\Entity\MisionesSocialesEntidadInspeccion;
use Siese\EntityBundle\Entity\DeportesEntidadInspeccion;
use Siese\EntityBundle\Entity\OrgSumEqsDepEntidadInspeccion;
use Siese\EntityBundle\Entity\ActividadesCulturalesEntidadInspeccion;
use Siese\EntityBundle\Entity\TalleresTrabajoEntidadInspeccion;
use Siese\EntityBundle\Entity\FrecuenciaRemuneracionLabEntidadInspeccion;
use Siese\EntityBundle\Entity\RemuneracionLaboralEntidadInspeccion;
use Siese\EntityBundle\Form\FiltrosBusquedaType;
use Siese\EntityBundle\Entity\PreparacionReglamentoEntidadInspeccion;
use Siese\EntityBundle\Entity\OrganismosApoyoEntidadInspeccion;
use Siese\EntityBundle\Entity\TipoApoyoOrgEntidadInspeccion;
use Siese\EntityBundle\Entity\TipoElaboracionPlanEntidadInspeccion;
use Siese\EntityBundle\Entity\DepAdmEntidadInspeccion;
use Siese\EntityBundle\Entity\EtapasProgramasEntidadInspeccion;
use Siese\EntityBundle\Entity\UnidadesTransEntidadInspeccion;
use Siese\EntityBundle\Entity\CursosFormacionEntidadInspeccion;
use Siese\EntityBundle\Entity\OrgCursosEntidadInspeccion;
use Siese\EntityBundle\Entity\ActividadesFueraEntidadInspeccion;
use Siese\EntityBundle\Entity\MedidasDicEntidadInspeccion;
use Siese\EntityBundle\Form\BloqueoInspeccionesType;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Siese\EntityBundle\Form\CierreInspeccionType;
use Siese\EntityBundle\Entity\ClasificacionPobEntidadInspeccion;


use Siese\EntityBundle\Form\InspeccionesEntidadesType;
use Siese\EntityBundle\Form\InspeccionesEntidadesFemeninasType;
use Siese\EntityBundle\Form\InspeccionesEntidadesPobType;
use Siese\EntityBundle\Form\InspeccionesPobSemPrivMasType;
use Siese\EntityBundle\Form\InspeccionesEntidadesPobFemSemPrivType;
use Siese\EntityBundle\Form\InspeccionesEntidadesPobFemPrivType;

/**
 * InspeccionesEntidades controller.
 *
 */
class InspeccionesEntidadesController extends Controller
{

    /**
     * Lists all InspeccionesEntidades entities.
     *
     */
     public function indexInspeccionesAction()
     {
       $servicioBloqueo = $this->container->get('siese_entity.bloqueo_inspeccion');
       
       $verificacionBloqInspecciones = $servicioBloqueo->verificar($this->getUser());
       $render = $this->render('SieseEntityBundle:InspeccionesEntidades:index_inspecciones.html.twig',
                         array('verificacionBloqInspecciones' => $verificacionBloqInspecciones));
       
       
       return $render;
     }
     
    public function indexAction(Request $request)
    {
      $em = $this->getDoctrine()->getManager();
      $servicioBloqueo = $this->container->get('siese_entity.bloqueo_inspeccion');
      $verificarBloqueo = $servicioBloqueo->verificar($this->getUser());
        
        
      /* Se buscan las inspecciones por el tipo de la Inspeccion (F,M) */
      $arregloFiltroBusqueda = array('tipoInspeccion' => 'M');
      $entities = null;
   
        // Si el usuario es registrador solo ve sus inspecciones
        if (true === $this->get('security.context')->isGranted('ROLE_USUARIO')):
          $arregloFiltroBusqueda['usuario'] = $this->getUser(); 
        elseif(true === $this->get('security.context')->isGranted('ROLE_DEFENSOR')):
          foreach($this->getUser()->getSedesUsuario() as $sedeUsuario):
            $sedes[] = $sedeUsuario->getSede()->getId();
          endforeach;
          $arregloFiltroBusqueda['sede'] = $sedes;
        endif;
        $servFiltrosBusqueda = $this->container->get('siese_entity.generar_filtros_busqueda');
      $formFiltrosBusqueda = $servFiltrosBusqueda->generarFormularioFiltros('listar');

      if ($request->isMethod('POST')){
            
            $formFiltrosBusqueda->handleRequest($request);
            
            $resFiltrosBusqueda = $request->request->get('siese_filtros_busqueda');
            
            
            $arregloFiltroBusqueda['ano'] = $resFiltrosBusqueda['anios'];
            $arregloFiltroBusqueda['entidad'] = $resFiltrosBusqueda['entidad'];
            $arregloFiltroBusqueda['estatus'] = array('R','P','V'); // Para buscar solo las inspecciones con estos ESTATUS
            $entities = $em->getRepository('SieseEntityBundle:InspeccionesEntidades')->findBy($arregloFiltroBusqueda);
            
            
            (!$entities ? $this->get('session')->getFlashBag()->set('warning-no-inspecciones','No existen inspecciones registradas para la busqueda realizada.') : '' );

       }
       
        return $this->render('SieseEntityBundle:InspeccionesEntidades/EntidadesMasculinas:index.html.twig', array(
            'entities' => $entities,
            'formFiltrosBusqueda' => $formFiltrosBusqueda->createView(),
            'verificarBloqueo' => $verificarBloqueo
        ));
    }
    
    public function filtrosBusquedaForm($urlAction)
    {
        $entity = null;
        $em = $this->getDoctrine()->getManager();
        
        $form = $this->createForm(new FiltrosBusquedaType($em),$entity, array(
            'action' => $this->generateUrl($urlAction),
            'method' => 'POST',
        ));
        $form->add('submit', 'submit', array('label' => 'Buscar Inspeccion',
                                              'attr' => array('class' => 'btn btn-warning')));        
         return $form;
    }


    /**
     * Creates a new InspeccionesEntidades entity.
     *
     */
    public function createAction(Request $request,$id = null)
    {
        $em = $this->getDoctrine()->getManager();
        
        $entity = ($id ? $em->getRepository('SieseEntityBundle:InspeccionesEntidades')->find($id) : new InspeccionesEntidades());
        $usuario = $this->getUser();
        
        $form = $this->createCreateForm($entity,$usuario);
        $form->handleRequest($request);
        
        $catProcedenciaPob = $em->getRepository('SieseEntityBundle:CatProcedenciaPob')->findAll();
        

        
        
        if ($form->isValid()) {
            $routeName = $request->get('_route');
            
            $this->edicionInspecciones($form,$entity,$em);
            
            $em = $this->getDoctrine()->getManager();
            
            $fechaActual = new \DateTime('now');
            $entity->setUsuario($usuario);
            $entity->setFeRegistro($fechaActual);
            $entity->setFeElaboracion($fechaActual);
            $entity->setAno($fechaActual->format('Y'));
            
            $entity->setEstatus('R');
            $entity->setTipoInspeccion('M');
            $entity->setEstadoInspeccion($form->get('estadoEnt')->getData());

            $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');
            $servCargarRelacionesInspecciones->crearCodigoInspeccion($entity,$form,'M',$fechaActual);
            
            $entity->setEntidad($form->get('entidad')->getData());
            
            $em->persist($entity);
            $em->flush();
            
            /* Carga de las Relaciones muchos a muchos de la entidad, todas deben 
             * ser despues del Seteo de la Entidad por eso se hace despues del
             * flush
             */
             $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');            
             $servCargarRelacionesInspecciones->cargarRelacionesFormularioEntidadMasculina($form,$entity,$em);
    
          $feRegistro = ($entity->getFeRegistro() ? $entity->getFeRegistro() : new \DateTime('now'));

          $this->get('session')->getFlashBag()->set('exito','La Inspección N° '.$entity->getCodInspeccion().' realizada a la entidad socioeducativa '.$entity->getEntidad()->getNbEntidad().' de fecha '.$feRegistro->format('d-m-Y').' a sido registrada exitosamente.');              
          return $this->redirect($this->generateUrl('listar'));
       
           // return $this->redirect($this->generateUrl('inspecciones-entidades_show', array('id' => $entity->getId())));
        }

        return $this->render('SieseEntityBundle:InspeccionesEntidades/EntidadesMasculinas:new_nuevo.html.twig', array(
            'entity' => $entity,
            'form'   => $form->createView(),
            'catProcedenciaPob' => $catProcedenciaPob
        ));
    }
    
    
    
    /**
    * Creates a form to create a InspeccionesEntidades entity.
    *
    * @param InspeccionesEntidades $entity The entity
    *
    * @return \Symfony\Component\Form\Form The form
    */
    private function createCreateForm(InspeccionesEntidades $entity,$usuario)
    {
        $form = $this->createForm(new InspeccionesEntidadesType($this->getDoctrine()->getManager(),$usuario), $entity, array(
            'action' => $this->generateUrl('inspecciones-entidades_create'),
            'method' => 'POST',
        ));

        $form->add('submit', 'submit', array('label' => 'Registrar Inspeccion',
                                             'attr' => array('class' => 'btn btn-warning')));

        return $form;
    }

    /**
     * Displays a form to create a new InspeccionesEntidades entity.
     *
     */
    public function newAction()
    {
        $entity = new InspeccionesEntidades();
        $em = $this->getDoctrine()->getManager();
        $usuario = $this->getUser();
        $form   = $this->createCreateForm($entity,$usuario);
        $catProcedenciaPob = $em->getRepository('SieseEntityBundle:CatProcedenciaPob')->findAll();
        $formCierre   = $this->cerrarInspeccionForm();
        

        
        return $this->render('SieseEntityBundle:InspeccionesEntidades/EntidadesMasculinas:new_nuevo.html.twig', array(
            'entity' => $entity,
            'form'   => $form->createView(),
             'formCierre'   => $formCierre->createView(),
            'catProcedenciaPob' => $catProcedenciaPob
        ));
    }

    /**
     * Finds and displays a InspeccionesEntidades entity.
     *
     */
    public function showAction($id)
    {
     $em = $this->getDoctrine()->getManager();
     $servicioBloqueo = $this->container->get('siese_entity.bloqueo_inspeccion');
     $verificarBloqueo = $servicioBloqueo->verificar($this->getUser());
     $usuario = $this->getUser();
     $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidades')->find($id);
     $catProcedenciaPob = $em->getRepository('SieseEntityBundle:CatProcedenciaPob')->findAll();
      
     if (!$entity) {
            throw $this->createNotFoundException('Unable to find InspeccionesEntidades entity.');
        }
        
        
        $secContext = $this->get('security.context');
        $aprobacionForm = null;
        $deleteForm = null;
        
        
        
        
        /* Si el usuario es  REGISTRADOR, debe tener el boton "Enviar para Aprobación" */
        if (true === $secContext->isGranted('ROLE_USUARIO')) {
          $aForm = $this->createAprobacionForm($entity,$usuario);
          $dForm = $this->createDeleteForm($id); // Solo el registrador puede eliminar sus inspecciones
          
          $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');
          $servCargarRelacionesInspecciones->mostrarRelacionesFormulario($entity,$aForm);
          
          $aprobacionForm = $aForm->createView();
          $deleteForm = $dForm->createView();
        } else {
           $aForm = $this->createAprobacionForm($entity,$usuario);
          
           $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');
           $servCargarRelacionesInspecciones->mostrarRelacionesFormulario($entity,$aForm);
           $aprobacionForm = $aForm->createView();
        }
        
        
        
        
        
        return $this->render('SieseEntityBundle:InspeccionesEntidades/EntidadesMasculinas:show_nuevo.html.twig', array(
          'entity'      => $entity,
            'form'   => $aprobacionForm,
            'delete_form' => $deleteForm,
            'verificarBloqueo' => $verificarBloqueo,
           'catProcedenciaPob' => $catProcedenciaPob  
          ));
    }

    
    /**
    * Creates a form to edit a InspeccionesEntidades entity.
    *
    * @param InspeccionesEntidades $entity The entity
    *
    * @return \Symfony\Component\Form\Form The form
    */
    private function createEditForm(InspeccionesEntidades $entity,$usuario)
    {
        $form = $this->createForm(new InspeccionesEntidadesType($this->getDoctrine()->getManager(),$usuario), $entity, array(
            'action' => $this->generateUrl('inspecciones-entidades_update', array('id' => $entity->getId())),
            'method' => 'PUT',
        ));

        
        $form->add('submit', 'submit', array('label' => 'Editar', 'attr' => array('class' => 'btn btn-warning')));
        
        
        return $form;
    }
    
    
    private function createValidarForm($entity,$usuario,$clafInspeccion) {
        
        if($clafInspeccion == 'inspeccion-poblacion-masculina-privada'):
          $inspeccionType = new InspeccionesEntidadesPobType($this->getDoctrine()->getManager(),$usuario);
        elseif($clafInspeccion == 'inspeccion-poblacion-masculina-semiprivada'):
          $inspeccionType = new InspeccionesPobSemPrivMasType($this->getDoctrine()->getManager(),$usuario);
        elseif($clafInspeccion == 'inspeccion-poblacion-femenina-privada'):
          $inspeccionType = new InspeccionesEntidadesPobFemPrivType($this->getDoctrine()->getManager(),$usuario);
        elseif($clafInspeccion == 'inspeccion-poblacion-femenina-semiprivada'):
          $inspeccionType = new InspeccionesEntidadesPobFemSemPrivType($this->getDoctrine()->getManager(),$usuario); 
        elseif($clafInspeccion == 'inspeccion-entidad-masculina'):
          $inspeccionType = new InspeccionesEntidadesType($this->getDoctrine()->getManager(),$usuario);
        elseif($clafInspeccion == 'inspeccion-entidad-femenina'):
          $inspeccionType = new InspeccionesEntidadesFemeninasType($this->getDoctrine()->getManager(),$usuario); 
        endif;

        
        $form = $this->createForm($inspeccionType, $entity, array(
            'action' => $this->generateUrl('inspecciones-validar', array('id' => $entity->getId(), 'clafInspeccion' => $clafInspeccion)),
            'method' => 'PUT',
        ));

        
        $form->add('submit', 'submit', array('label' => 'Validar Inspeccion', 'attr' => array('class' => 'btn btn-primary')))
             ->add('rechazar', 'button', array('label' => 'Rechazar Inspeccion', 'attr' => array('class' => 'btn btn-danger')));
        
        
        return $form;        
    }
    
    
    public function rechazarInspeccionAction($id,$clafInspeccion) {
        $em = $this->getDoctrine()->getManager();
        
        if($clafInspeccion == 'inspeccion-poblacion-masculina-privada' || 
           $clafInspeccion == 'inspeccion-poblacion-masculina-semiprivada' ||
           $clafInspeccion == 'inspeccion-poblacion-femenina-privada' ||
           $clafInspeccion == 'inspeccion-poblacion-femenina-semiprivada'):
           
          $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidadesPob')->find((integer) $id);
        elseif($clafInspeccion == 'inspeccion-entidad-masculina' ||
               $clafInspeccion == 'inspeccion-entidad-femenina'):
          $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidades')->find((integer) $id);
        endif;    
        
      
      if($entity):
        $feRegistro = ($entity->getFeRegistro() ? $entity->getFeRegistro() : new \DateTime('now'));
        $this->get('session')->getFlashBag()->set('exito','La Inspección N° '.$entity->getCodInspeccion().' realizada a la entidad socioeducativa '.$entity->getEntidad()->getNbEntidad().' de fecha '.$feRegistro->format('d-m-Y').' a sido rechazada exitosamente.');
        $entity->setEstatus('R');
        $em->persist($entity);
        $em->flush();
      endif;
      
      return new Response($this->generateUrl('listado-aprobar-inspecciones'));
    }
    
    /**
    * Crea el formulario para el envio de la inspección para su aprobación por
    * el Defensor
    *
    * @param InspeccionesEntidades $entity The entity
    *
    * @return \Symfony\Component\Form\Form The form
    */
    private function createAprobacionForm(InspeccionesEntidades $entity,$usuario)
    {
        $form = $this->createForm(new InspeccionesEntidadesType($this->getDoctrine()->getManager(),$usuario), $entity, array(
            'action' => $this->generateUrl('post_inspeccion_enviar_aprobacion', array('id' => $entity->getId())),
            'method' => 'POST',
        ));

        if ((true === $this->get('security.context')->isGranted('ROLE_USUARIO') && $entity->getEstatus() == 'R') or ($entity->getEstatus() == 'R' && $entity->getUsuario()->getId() == $this->getUser()->getId())) {
          $form->add('submit', 'submit', array('label' => 'Culminar Registro', 'attr' => array('class' => 'btn btn-warning')));
        }
        
        return $form;
    }
    
    
    /**
     * Displays a form to edit an existing InspeccionesEntidades entity.
     *
     */
    public function editAction($id)
    {
        $em = $this->getDoctrine()->getManager();
      
        $usuario = $this->getUser();
        $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidades')->find($id);
        $catProcedenciaPob = $em->getRepository('SieseEntityBundle:CatProcedenciaPob')->findAll();
        if (!$entity) {
            throw $this->createNotFoundException('Unable to find InspeccionesEntidades entity.');
        }

        $editForm = $this->createEditForm($entity,$usuario);
        $deleteForm = $this->createDeleteForm($id);
        
        $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');
        $servCargarRelacionesInspecciones->mostrarRelacionesFormulario($entity,$editForm);        
        
        return $this->render('SieseEntityBundle:InspeccionesEntidades/EntidadesMasculinas:edit_nuevo.html.twig', array(
            'entity'      => $entity,
            'form'   => $editForm->createView(),
            'delete_form' => $deleteForm->createView(),
           'catProcedenciaPob' => $catProcedenciaPob,
        ));
    }    
    
    /**
     * Edits an existing InspeccionesEntidades entity.
     *
     */
    public function updateAction(Request $request, $id)
    {
        $em = $this->getDoctrine()->getManager();
        $usuario = $this->getUser();
        $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidades')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find InspeccionesEntidades entity.');
        }

        $deleteForm = $this->createDeleteForm($id);
        $editForm = $this->createEditForm($entity,$usuario);
        $editForm->handleRequest($request);

        if ($request->getMethod() === 'POST' || $request->getMethod() === 'PUT') {
            
            $this->edicionInspecciones($editForm,$entity,$em);
            
            $feRegistro = $entity->getFeRegistro();
            $this->get('session')->getFlashBag()->set('exito','La Inspección N° '.$entity->getCodInspeccion().' realizada a la entidad socioeducativa '.$entity->getEntidad()->getNbEntidad().' de fecha '.$feRegistro->format('d-m-Y').' a sido modificada exitosamente.');              
            return $this->redirect($this->generateUrl('listar'));
        }

        return $this->render('SieseEntityBundle:InspeccionesEntidades:edit.html.twig', array(
            'entity'      => $entity,
            'edit_form'   => $editForm->createView(),
            'delete_form' => $deleteForm->createView(),
        ));
    }
    
    public function edicionInspecciones($editForm,$entity,$em) {
      /* Servicio para generar el codigo de la inspeccion */
      $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');
      if (!$entity->getCodInspeccion()):
        $fechaActual = ($entity->getFeRegistro() ? $entity->getFeRegistro() : new \DateTime('now'));
        $servCargarRelacionesInspecciones->crearCodigoInspeccion($entity,$editForm,'M',$fechaActual);
      endif;
      /* Servicio para generar el codigo de la inspeccion */             
            
            
      $entity->setEntidad($editForm->get('entidad')->getData());
      $em->flush();           
      $servCargarRelacionesInspecciones->cargarRelacionesFormularioEntidadMasculina($editForm,$entity,$em);            
    }
    
    /**
     * Deletes a InspeccionesEntidades entity.
     *
     */
    public function deleteAction(Request $request, $id)
    {
        $form = $this->createDeleteForm($id);
        $form->handleRequest($request);

        if ($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidades')->find($id);

            if (!$entity) {
                throw $this->createNotFoundException('Unable to find InspeccionesEntidades entity.');
            }

            $entity->setEstatus('E');
            $em->flush();
        }
      $this->get('session')->getFlashBag()->set('exito','La Inspeccion a sido Eliminada Exitosamente.');
      return $this->redirect($this->generateUrl('listar'));
    }

    /**
     * Creates a form to delete a InspeccionesEntidades entity by id.
     *
     * @param mixed $id The entity id
     *
     * @return \Symfony\Component\Form\Form The form
     */
    private function createDeleteForm($id)
    {
        return $this->createFormBuilder()
            ->setAction($this->generateUrl('inspecciones-entidades_delete', array('id' => $id)))
            ->setMethod('DELETE')
            ->add('submit', 'submit', array('label' => 'Borrar', 'attr' => array('class' => 'btn btn-danger')))
            ->getForm()
        ;
    }
    
    
    public function sedesParaBloquearInspeccionesAction(Request $request) {
      $em = $this->getDoctrine()->getManager();
        
      /* Se buscan todas las sedes para hacer un listado y asi poder
       * seleccionar las que se van a bloquear o desbloquear
       */
      $sedes = $em->getRepository('SieseEntityBundle:CatSedes')->findBy(array(),array('codSede' => 'ASC'));

        
      return $this->render('SieseEntityBundle:InspeccionesEntidades:bloquear_inspecciones.html.twig', array(
          'sedes' => $sedes
        ));
    }
    
    public function bloquearInspeccionesAction($idSede) {
      $em = $this->getDoctrine()->getManager();
      
      $sede = $em->getRepository('SieseEntityBundle:CatSedes')->find($idSede);
        
      $sede->setPuedeRegistrarInspecciones(FALSE);
      $em->persist($sede);
      $em->flush();
            
      $this->get('session')->getFlashBag()->set('exito','La sede '.$sede->getNbSede().' ha sido bloqueada para realizar registros de inspecciones.');
            
      return $this->redirect($this->generateUrl('listado-sedes-para-bloquear'));
    }
    
    public function desbloquearInspeccionesAction($idSede) {
      $em = $this->getDoctrine()->getManager();
      
      $sede = $em->getRepository('SieseEntityBundle:CatSedes')->find($idSede);
        
      $sede->setPuedeRegistrarInspecciones(TRUE);
      $em->persist($sede);
      $em->flush();
            
      $this->get('session')->getFlashBag()->set('exito','La sede '.$sede->getNbSede().' ha sido habilitada para realizar registros de inspecciones exitosamente.');
            
      return $this->redirect($this->generateUrl('listado-sedes-para-bloquear'));   
    }    
    
    public function municipiosPorEstadoAction(Request $request) {
        $estado_id = $request->request->get('estado_id');

        $em = $this->getDoctrine()->getManager();
        $municipios = $em->getRepository('SieseEntityBundle:CatMunicipios')->findByEstadoId($estado_id);

        return new JsonResponse($municipios);
    }    
    
    public function entidadesPorEstadoAction(Request $request) {
        $estado_id = $request->request->get('estado_id');

        $em = $this->getDoctrine()->getManager();
        $entities = $em->getRepository('SieseEntityBundle:Entidades')->findByEstadoId($estado_id);

        return new JsonResponse($entities); 
    }
    
    public function guardarDatosInsPobAction(Request $request,$id) {
        $em = $this->getDoctrine()->getManager();
        $entity = ($id != 'vacio' ? $em->getRepository('SieseEntityBundle:InspeccionesEntidades')->find($id) : new InspeccionesEntidades());
        
        $usuario = $this->getUser();
        $form = $this->createCreateForm($entity,$usuario);
        $form->handleRequest($request);
        
        
        
        $fechaActual = new \DateTime('now');
            
        $entity->setUsuario($usuario);
        $entity->setFeRegistro($fechaActual);
        $entity->setFeElaboracion($fechaActual);
        $entity->setAno($fechaActual->format('Y'));
        $entity->setTipoInspeccion('M');  // Masculino
       
        
        $entity->setEntidad($form->get('entidad')->getData());
        $entity->setEstadoInspeccion($form->get('estadoEnt')->getData());
        
        
        $em->persist($entity);
        $em->flush();
        
        $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');           
        $servCargarRelacionesInspecciones->cargarRelacionesFormularioEntidadMasculina($form,$entity,$em);
        
        

        return new Response((integer) $entity->getId());        
    }
    

    
    public function editarDatosInsPobAction(Request $request,$id) {
        $em = $this->getDoctrine()->getManager();
        $entity = ($id != 'vacio' ? $em->getRepository('SieseEntityBundle:InspeccionesEntidades')->find($id) : new InspeccionesEntidades());
        
        $usuario = $this->getUser();
        $form = $this->createEditForm($entity,$usuario);
        $form->handleRequest($request);
        
        $this->edicionInspecciones($form,$entity,$em);        
        return new Response((integer) $entity->getId());        
    }    
    
    public function listadoAprobarInspeccionesAction(Request $request) {
      $em = $this->getDoctrine()->getManager();
        $servicioBloqueo = $this->container->get('siese_entity.bloqueo_inspeccion');
        $verificarBloqueo = $servicioBloqueo->verificar($this->getUser());
        $entities=null;
       
        $servFiltrosBusqueda = $this->container->get('siese_entity.generar_filtros_busqueda');
        $formFiltrosBusqueda = $servFiltrosBusqueda->generarFormularioFiltros('listado-aprobar-inspecciones');
        
        $inspeccionesEntidades = null;
        $arregloInspeccionesParaAprobar = null;
        $inspeccionesEntidadesPoblacion = null;
        
        $sedesId = array();
        foreach($this->getUser()->getSedesUsuario() as $sedeUsuario):
          $sedesId[] = $sedeUsuario->getSede()->getId();    
        endforeach;
        
        if ($request->isMethod('POST')){
            
            $formFiltrosBusqueda->handleRequest($request);
            
            $resFiltrosBusqueda = $request->request->get('siese_filtros_busqueda');
            
            
            $arregloFiltroBusqueda['ano'] = $resFiltrosBusqueda['anios'];
            $arregloFiltroBusqueda['entidad'] = $resFiltrosBusqueda['entidad'];
            $arregloFiltroBusqueda['sede'] = $sedesId;
            $arregloFiltroBusqueda['estatus'] = 'P'; //Solo se buscan las inpsecciones en estatus P
            
            $inspeccionesEntidades = $em->getRepository('SieseEntityBundle:InspeccionesEntidades')->findBy($arregloFiltroBusqueda);
            $inspeccionesEntidadesPoblacion = $em->getRepository('SieseEntityBundle:InspeccionesEntidadesPob')->findBy($arregloFiltroBusqueda);
            
            if(!$inspeccionesEntidades && !$inspeccionesEntidadesPoblacion):
              $this->get('session')->getFlashBag()->set('warning-no-inspecciones','No existen inspecciones para validar actualmente para la selección realizada.');    
            else:
              $arregloInspeccionesParaAprobar = $this->arregloInspeccionesParaAprobar($inspeccionesEntidades,$inspeccionesEntidadesPoblacion);
            endif;
            
            
            //return $this->redirect($this->generateUrl('listado-aprobar-inspecciones'));
       }
       
        return $this->render('SieseEntityBundle:InspeccionesEntidades/AprobarInspecciones:listar_inspecciones_pendientes.html.twig', array(
            'entities' => $inspeccionesEntidades,
            'arregloInspeccionesParaAprobar' => $arregloInspeccionesParaAprobar,
            'inspeccionesEntidadesPoblacion' => $inspeccionesEntidadesPoblacion,
            'formFiltrosBusqueda' => $formFiltrosBusqueda->createView(),
            'verificarBloqueo' => $verificarBloqueo
        ));
    }
    
    protected function arregloInspeccionesParaAprobar($inspeccionesEntidades,$inspeccionesEntidadesPoblacion) {
      $arregloInspeccionesParaAprobar = array();
      $datosInspeccionesParaAprobar = array();
      
      foreach($inspeccionesEntidades as $row):
          
        if($row->getTipoInspeccion() == 'F'):
          $tipoInspeccion = 'Entidad Femenina'; 
        elseif($row->getTipoInspeccion() == 'M'):
          $tipoInspeccion = 'Entidad Masculina';   
        endif;
        
        
        $datosInspeccionesParaAprobar['id'] = $row->getId();
        $datosInspeccionesParaAprobar['codInspeccion'] = $row->getCodInspeccion();
        $datosInspeccionesParaAprobar['feAplicacionEncuesta'] = $row->getFeAplicacionEncuesta();
        $datosInspeccionesParaAprobar['feRegistro'] = $row->getFeRegistro();
        $datosInspeccionesParaAprobar['sede'] = $row->getSede();
        $datosInspeccionesParaAprobar['tipoInspeccion'] = $tipoInspeccion;
        $datosInspeccionesParaAprobar['usuario'] = $row->getUsuario();
        $datosInspeccionesParaAprobar['estatus'] = $row->getEstatus();
        
        if($row->getTipoInspeccion() == 'M'):
          $clasfInspeccion = 'inspeccion-entidad-masculina';  
        else:
          $clasfInspeccion = 'inspeccion-entidad-femenina';    
        endif;
        
        $datosInspeccionesParaAprobar['clafInspeccion'] = $clasfInspeccion;
        
        $arregloInspeccionesParaAprobar[] = $datosInspeccionesParaAprobar;
      endforeach;

      foreach($inspeccionesEntidadesPoblacion as $row):
          
        if($row->getTipoMedida() == 'P'):
          $tipoMedida = 'Privado(a)';
        elseif($row->getTipoMedida() == 'S'):
          $tipoMedida = 'Semi-Privado(a)';
        else:
          $tipoMedida = '';
        endif;
        
        if($row->getTipoInspeccion() == 'F'):
          $tipoInspeccion = 'Población Femenina '.$tipoMedida; 
        elseif($row->getTipoInspeccion() == 'M'):
          $tipoInspeccion = 'Población Masculina '.$tipoMedida;   
        endif;
        
        $datosInspeccionesParaAprobar['id'] = $row->getId();
        $datosInspeccionesParaAprobar['codInspeccion'] = $row->getCodInspeccion();
        $datosInspeccionesParaAprobar['feAplicacionEncuesta'] = $row->getFeAplicacionEncuesta();
        $datosInspeccionesParaAprobar['feRegistro'] = $row->getFeRegistro();
        $datosInspeccionesParaAprobar['sede'] = $row->getSede();
        $datosInspeccionesParaAprobar['tipoInspeccion'] = $tipoInspeccion;
        $datosInspeccionesParaAprobar['usuario'] = $row->getUsuario();
        $datosInspeccionesParaAprobar['estatus'] = $row->getEstatus();
        
        if($row->getTipoInspeccion() == 'M' && $row->getTipoMedida() == 'P'):
          $clasfInspeccion = 'inspeccion-poblacion-masculina-privada';
        elseif($row->getTipoInspeccion() == 'M' && $row->getTipoMedida() == 'S'):
          $clasfInspeccion = 'inspeccion-poblacion-masculina-semiprivada';
        elseif($row->getTipoInspeccion() == 'F' && $row->getTipoMedida() == 'P'):
          $clasfInspeccion = 'inspeccion-poblacion-femenina-privada';
        elseif($row->getTipoInspeccion() == 'F' && $row->getTipoMedida() == 'S'):
          $clasfInspeccion = 'inspeccion-poblacion-femenina-semiprivada';  
        else:
          $clasfInspeccion = 'vacio';
        endif;

        $datosInspeccionesParaAprobar['clafInspeccion'] = $clasfInspeccion;
        
        $arregloInspeccionesParaAprobar[] = $datosInspeccionesParaAprobar;
      endforeach;
      
      
      return $arregloInspeccionesParaAprobar;  
    }
    
    public function validarInspeccionAction(Request $request,$id,$clafInspeccion)
    {
        $em = $this->getDoctrine()->getManager();
        $usuario = $this->getUser();
       
        if($clafInspeccion == 'inspeccion-entidad-masculina' || $clafInspeccion == 'inspeccion-entidad-femenina'):
          $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidades')->find($id);
        else:
          $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidadesPob')->find($id);    
        endif;

        $validarForm = $this->createValidarForm($entity,$usuario,$clafInspeccion);
        $validarForm->handleRequest($request);
        
        $catProcedenciaPob = $em->getRepository('SieseEntityBundle:CatProcedenciaPob')->findAll();
        
        if (!$entity) {
            throw $this->createNotFoundException('Unable to find InspeccionesEntidades entity.');
        }

        
        
        
        $deleteForm = $this->createDeleteForm($id);

        
       
        if($request->getMethod() === 'POST' || $request->getMethod() === 'PUT'):
          $entity->setEstatus('V');
          $em->persist($entity);
          $em->flush();
          
          $this->get('session')->getFlashBag()->set('exito','La inspección N° '.$entity->getCodInspeccion().' ha sido aprobada de manera exitosa.');
            
          return $this->redirect($this->generateUrl('listado-aprobar-inspecciones'));           
        endif;
        
        
      

        
        if($clafInspeccion == 'inspeccion-poblacion-masculina-privada'):
          $catPersonalProf = $em->getRepository('SieseEntityBundle:CatPersonal')->findBy(array('estatus' => 'P'));
          $catAsistenciaTecnica = $em->getRepository('SieseEntityBundle:CatAsistenciaTecnica')->findAll();
          $catServiciosBasicos = $em->getRepository('SieseEntityBundle:CatServiciosBasicos')->findAll();
          $catInfraestructura = $em->getRepository('SieseEntityBundle:CatInfraestructura')->findAll();
          $arregloVariables['catPersonalProf'] = $catPersonalProf;
          $arregloVariables['catAsistenciaTecnica'] = $catAsistenciaTecnica;
          $arregloVariables['catServiciosBasicos'] = $catServiciosBasicos;
          $arregloVariables['catInfraestructura'] = $catInfraestructura;
          
          
          $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');
          $servCargarRelacionesInspecciones->mostrarRelacionesFormularioPoblacion($entity,$validarForm); 
          
          
        elseif($clafInspeccion == 'inspeccion-poblacion-masculina-semiprivada'):
          $catPersonalProf = $em->getRepository('SieseEntityBundle:CatPersonal')->findBy(array('estatus' => 'P'));
          $catAsistenciaTecnica = $em->getRepository('SieseEntityBundle:CatAsistenciaTecnica')->findAll();
          $catServiciosBasicos = $em->getRepository('SieseEntityBundle:CatServiciosBasicos')->findAll();
          $catInfraestructura = $em->getRepository('SieseEntityBundle:CatInfraestructura')->findAll();
          $arregloVariables['catPersonalProf'] = $catPersonalProf;
          $arregloVariables['catAsistenciaTecnica'] = $catAsistenciaTecnica;
          $arregloVariables['catServiciosBasicos'] = $catServiciosBasicos;
          $arregloVariables['catInfraestructura'] = $catInfraestructura;
          
          $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');
          $servCargarRelacionesInspecciones->mostrarRelacionesFormularioPoblacion($entity,$validarForm);   
          
        elseif($clafInspeccion == 'inspeccion-poblacion-femenina-privada'):
          $catPersonalProf = $em->getRepository('SieseEntityBundle:CatPersonal')->findBy(array('estatus' => 'P'));
          $catAsistenciaTecnica = $em->getRepository('SieseEntityBundle:CatAsistenciaTecnica')->findAll();
          $catServiciosBasicos = $em->getRepository('SieseEntityBundle:CatServiciosBasicos')->findAll();
          $catInfraestructura = $em->getRepository('SieseEntityBundle:CatInfraestructura')->findAll();
          $arregloVariables['catPersonalProf'] = $catPersonalProf;
          $arregloVariables['catAsistenciaTecnica'] = $catAsistenciaTecnica;
          $arregloVariables['catServiciosBasicos'] = $catServiciosBasicos;
          $arregloVariables['catInfraestructura'] = $catInfraestructura;
          
          
          $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');
          $servCargarRelacionesInspecciones->mostrarRelacionesFormularioPoblacion($entity,$validarForm); 
          
          
        elseif($clafInspeccion == 'inspeccion-poblacion-femenina-semiprivada'):
          $catPersonalProf = $em->getRepository('SieseEntityBundle:CatPersonal')->findBy(array('estatus' => 'P'));
          $catAsistenciaTecnica = $em->getRepository('SieseEntityBundle:CatAsistenciaTecnica')->findAll();
          $catServiciosBasicos = $em->getRepository('SieseEntityBundle:CatServiciosBasicos')->findAll();
          $catInfraestructura = $em->getRepository('SieseEntityBundle:CatInfraestructura')->findAll();
          $arregloVariables['catPersonalProf'] = $catPersonalProf;
          $arregloVariables['catAsistenciaTecnica'] = $catAsistenciaTecnica;
          $arregloVariables['catServiciosBasicos'] = $catServiciosBasicos;
          $arregloVariables['catInfraestructura'] = $catInfraestructura;
          
          $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');
          $servCargarRelacionesInspecciones->mostrarRelacionesFormularioPoblacion($entity,$validarForm);          
            
        elseif($clafInspeccion == 'inspeccion-entidad-masculina'):
          $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');
          $servCargarRelacionesInspecciones->mostrarRelacionesFormulario($entity,$validarForm);            
        elseif($clafInspeccion == 'inspeccion-entidad-femenina'):
          $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');
          $servCargarRelacionesInspecciones->mostrarRelacionesFormulario($entity,$validarForm);             
        endif;  
        
        $template = $this->traerVistaAprobar($clafInspeccion);
        
        $arregloVariables['entity'] = $entity;
        $arregloVariables['form'] = $validarForm->createView();
        $arregloVariables['delete_form'] = $deleteForm->createView();
        $arregloVariables['catProcedenciaPob'] = $catProcedenciaPob;
        return $this->render($template,$arregloVariables);
    }
    
    private function traerVistaAprobar($clafInspeccion) {
        $twig = 'aprobar_inspecciones.html.twig';
        if($clafInspeccion == 'inspeccion-poblacion-masculina-privada'):
          $template = 'SieseEntityBundle:InspeccionesEntidadesPob/AprobarInspecciones/PrivMasculina:'.$twig;
        elseif($clafInspeccion == 'inspeccion-poblacion-masculina-semiprivada'):
          $template = 'SieseEntityBundle:InspeccionesEntidadesPob/AprobarInspecciones/SemiPrivMasculina:'.$twig;
        elseif($clafInspeccion == 'inspeccion-poblacion-femenina-privada'):
          $template = 'SieseEntityBundle:InspeccionesEntidadesPob/AprobarInspecciones/PrivFemeninas:'.$twig;
        elseif($clafInspeccion == 'inspeccion-poblacion-femenina-semiprivada'):
          $template = 'SieseEntityBundle:InspeccionesEntidadesPob/AprobarInspecciones/SemiPrivFemeninas:'.$twig;
        elseif($clafInspeccion == 'inspeccion-entidad-masculina'):
          $template = 'SieseEntityBundle:InspeccionesEntidades/AprobarInspecciones/EntidadesMasculinas:'.$twig;
        elseif($clafInspeccion == 'inspeccion-entidad-femenina'):
          $template = 'SieseEntityBundle:InspeccionesEntidades/AprobarInspecciones/EntidadesFemeninas:'.$twig; 
        endif;
        
        return $template;    
    }
    
    public function enviarParaAprobacionAjaxAction($id) {
      $em = $this->getDoctrine()->getManager();
      $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidades')->find($id);
        
      $this->cambiarEstatusInspeccion('P',$entity);
      
        
      return new JsonResponse('');        
    }
    
    public function enviarParaAprobacionPostAction($id,$tipoInspeccion) {
      $em = $this->getDoctrine()->getManager();
        echo 'esta es'.$tipoInspeccion; 
      if($tipoInspeccion == 'semipriv-femenino'):
        $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidadesPob')->find($id);
        $redireccion = $this->redirect($this->generateUrl('listado_inspeccion_poblacion_femenina_semiprivada'));
     elseif($tipoInspeccion == 'privado-femenino'):
        $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidadesPob')->find($id);
        $redireccion = $this->redirect($this->generateUrl('listado_inspeccion_poblacion_femenina_privada'));
     elseif($tipoInspeccion == 'semipriv-masculino'):
        $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidadesPob')->find($id);
        $redireccion = $this->redirect($this->generateUrl('inspeccion_poblacion_semi_masculino'));
      elseif($tipoInspeccion == 'privado-masculino'):
        $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidadesPob')->find($id);
        $redireccion = $this->redirect($this->generateUrl('inspeccion_poblacion'));         
      elseif($tipoInspeccion == 'entidades-femeninas'):
        $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidades')->find($id);
        $redireccion = $this->redirect($this->generateUrl('listar-femeninas'));  
      else:
        $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidades')->find($id);
        $redireccion = $this->redirect($this->generateUrl('listar'));
      endif;
      

      $this->cambiarEstatusInspeccion('P',$entity);

      $this->get('session')->getFlashBag()->set('exito','La inspección N° '.$entity->getCodInspeccion().' ha sido enviada para su aprobación por el Defensor satisfactoriamente.');
      return $redireccion;        
    }    
    
    /* Función que permite cambiar el estatus de una inspección
     */
    public function cambiarEstatusInspeccion($estatus,$entity) {
      $em = $this->getDoctrine()->getManager();
      $entity->setEstatus($estatus);
      $em->persist($entity);
      $em->flush();         
    }    
   public function cerrarInspeccionForm() {
        $entity = null;
        $form = $this->createForm(new CierreInspeccionType(),$entity, array(
            'action' => $this->generateUrl('cerrar-inspeccion'),
            'method' => 'POST',
        ));
          $form->add('submit', 'submit', array('label' => 'Guardar',
                                              'attr' => array('class' => 'btn btn-warning')));  
        return $form;
    }

    
}